package com.youlai.boot.factory.model.form;

import java.io.Serial;
import java.io.Serializable;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDate;

import jakarta.validation.constraints.*;

/**
 * 服装厂员工信息表单对象
 *
 * @author youlaitech
 * @since 2025-09-28 21:51
 */
@Getter
@Setter
@Schema(description = "服装厂员工信息表单对象")
public class FactoryMemberForm implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Schema(description = "员工ID（主键）")
    @NotNull(message = "员工ID（主键）不能为空")
    private Long id;

    @Schema(description = "员工编号/工号")
    @NotBlank(message = "员工编号/工号不能为空")
    @Size(max=50, message="员工编号/工号长度不能超过50个字符")
    private String employeeId;

    @Schema(description = "姓名")
    @NotBlank(message = "姓名不能为空")
    @Size(max=100, message="姓名长度不能超过100个字符")
    private String name;

    @Schema(description = "性别")
    @Size(max=1, message="性别长度不能超过1个字符")
    private String gender;

    @Schema(description = "身份证号")
    @Size(max=20, message="身份证号长度不能超过20个字符")
    private String idCard;

    @Schema(description = "联系电话")
    @Size(max=20, message="联系电话长度不能超过20个字符")
    private String phone;

    @Schema(description = "紧急联系人")
    @Size(max=100, message="紧急联系人长度不能超过100个字符")
    private String emergencyContact;

    @Schema(description = "紧急联系人电话")
    @Size(max=20, message="紧急联系人电话长度不能超过20个字符")
    private String emergencyPhone;

    @Schema(description = "家庭住址")
    @Size(max=65535, message="家庭住址长度不能超过65535个字符")
    private String address;

    @Schema(description = "照片URL")
    @Size(max=255, message="照片URL长度不能超过255个字符")
    private String photoUrl;

    @Schema(description = "部门/车间")
    @NotBlank(message = "部门/车间不能为空")
    @Size(max=50, message="部门/车间长度不能超过50个字符")
    private String department;

    @Schema(description = "班组/产线")
    @Size(max=50, message="班组/产线长度不能超过50个字符")
    private String teamGroup;

    @Schema(description = "岗位")
    @NotBlank(message = "岗位不能为空")
    @Size(max=50, message="岗位长度不能超过50个字符")
    private String position;

    @Schema(description = "工种/工序")
    @Size(max=100, message="工种/工序长度不能超过100个字符")
    private String jobType;

    @Schema(description = "技能等级")
    @Size(max=2, message="技能等级长度不能超过2个字符")
    private String skillLevel;

    @Schema(description = "擅长服装类型")
    @Size(max=100, message="擅长服装类型长度不能超过100个字符")
    private String specializedCategory;

    @Schema(description = "会操作的设备")
    @Size(max=65535, message="会操作的设备长度不能超过65535个字符")
    private String operableEquipment;

    @Schema(description = "入职日期")
    @NotNull(message = "入职日期不能为空")
    private LocalDate hireDate;

    @Schema(description = "合同开始日期")
    private LocalDate contractStartDate;

    @Schema(description = "合同结束日期")
    private LocalDate contractEndDate;

    @Schema(description = "在职状态")
    @Size(max=3, message="在职状态长度不能超过3个字符")
    private String employmentStatus;

    @Schema(description = "离职日期")
    private LocalDate resignationDate;

    @Schema(description = "离职原因")
    @Size(max=65535, message="离职原因长度不能超过65535个字符")
    private String resignationReason;

    @Schema(description = "计薪方式")
    @NotNull(message = "计薪方式不能为空")
    @Size(max=2, message="计薪方式长度不能超过2个字符")
    private String salaryType;

    @Schema(description = "底薪/保底工资")
    private BigDecimal baseSalary;

    @Schema(description = "计件单价")
    private BigDecimal pieceRate;

    @Schema(description = "社保号")
    @Size(max=50, message="社保号长度不能超过50个字符")
    private String socialInsuranceNumber;

    @Schema(description = "银行账号")
    @Size(max=100, message="银行账号长度不能超过100个字符")
    private String bankAccount;

    @Schema(description = "日均产量")
    private BigDecimal dailyOutputAvg;

    @Schema(description = "质量合格率(%)")
    private BigDecimal qualityPassRate;

    @Schema(description = "返工率(%)")
    private BigDecimal reworkRate;

    @Schema(description = "绩效评分")
    private BigDecimal performanceRating;

    @Schema(description = "创建时间")
    private String createdAt;

    @Schema(description = "更新时间")
    private String updatedAt;

    @Schema(description = "创建人")
    @Size(max=50, message="创建人长度不能超过50个字符")
    private String createdBy;

    @Schema(description = "更新人")
    @Size(max=50, message="更新人长度不能超过50个字符")
    private String updatedBy;

    @Schema(description = "备注")
    @Size(max=65535, message="备注长度不能超过65535个字符")
    private String notes;

    @Schema(description = "微信openId")
    private String openId;
}
